home *** CD-ROM | disk | FTP | other *** search
- /* create an array of prime numbers between two given numbers
- starting_prime and end_prime. store in p the number of primes found*/
-
- #include "defs.h"
-
- int* am_primes_between(int starting_prime,int end_prime,int *p)
- {
- int n=0 ,y=0,a[2],h=0;
- int* feld = 0,x=0;
-
- if((feld = (int*)malloc(100 * sizeof(int)))==NULL)
- return 0;
-
- if(starting_prime<0)
- starting_prime = -starting_prime;
-
- if(end_prime<0)
- end_prime = -end_prime;
-
- if(starting_prime>end_prime){
- x=end_prime;
- end_prime=starting_prime;
- starting_prime=x;
- x=0;
- }
-
- x=starting_prime%6;
-
- if(starting_prime<5){
- if(starting_prime<3){
- feld[0]=2;
- feld[1]=3;
- n=2;
- h=2;
- }
- else if(starting_prime==3){
- feld[0]=3;
- n=1;
- h=1;
- }
- x=5;
- a[0]=2;
- a[1]=4;
- }
- else if(x==1){
- x=starting_prime;
- a[0]=4;
- a[1]=2;
- n = 0;
- }
- else if(x==5){
- x=starting_prime;
- a[0]=2;
- a[1]=4;
- n = 0;
- }
- else if (x==0){
- x=starting_prime+1;
- a[0]=4;
- a[1]=2;
- n = 0;
- }
- else{
- x=starting_prime+5-x;
- a[0]=2;
- a[1]=4;
- n = 0;
- }
-
-
- while(x <= end_prime)
- {
- if(am_isprime(x)){
- feld[n++] = x;
- h++;
- if(h>99){
- if((feld = (unsigned int*)realloc(feld,(n+100) * sizeof(unsigned int)))==NULL)
- return 0;
- h=0;
- }
- }
- x=x+a[y];
- y++;
- if(y>1)
- y=0;
- }
- *p=n;
- feld[n]=0;
- return feld;
- }
-